2012/12/13

Recent entries from same category

  1. VimConf 2023 Tiny に参加しました
  2. Vim で Go 言語を書くために行った引越し作業 2020年度版
  3. Vim をモダンな IDE に変える LSP の設定
  4. ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版
  5. VimConf 2019 を終えて

vim script には perl 等で見るヒアドキュメント print <<"EOF";
hello
world
EOF
これを言語レベルではサポートしていない。しかしこのヒアドキュメントも一種の言語的な縛りであって、縛りの許容範囲次第では vim script でもヒアドキュメントっぽい事は出来る。 functions:here_doc(sfile, slnum)
  let lines = readfile(a:sfile)
  return iconv(join(lines[a:slnum+1 :index(lines, 'endif')-1], "\n")'utf-8', &encoding)
endfunction
command-nargs=1 HereIf0 execute printf('let %s = s:here_doc(expand("<sfile>"), expand("<slnum>"))'<q-args>)
HereIf0 というコマンドを定義し scriptencoding utf-8

HereIf0 foo
if 0
はろー
わーるど
endif

echo foo
この様に実行すると foo という変数に if 0 から endif までが入る。HereIf0 から if 0 までに行を入れてはならないし、endif を省略して書いたり後続コメントを書いてはいけない。あとファイルのエンコーディングが utf-8 決めうちになる。
まぁこれも縛りと思えば納得出来る。(縛りすぎ)

ちなみに perl の __DATA__ セクションっぽいのは、随分昔にやってた。
http://mattn.kaoriya.net/software/vim/20080317150503.htm
http://subtech.g.hatena.ne.jp/motemen/20080324/1206337579
Posted at by